package com.kchouse.common;

import android.app.ActivityManager;
import android.app.Application;
import android.content.Context;
import android.os.Environment;

import com.fm.openinstall.OpenInstall;
import com.kchouse.MainActivity;
import com.kchouse.R;
import com.lljjcoder.style.citylist.utils.CityListLoader;
import com.tencent.bugly.Bugly;
import com.tencent.bugly.beta.Beta;
import com.tencent.mm.opensdk.modelbase.BaseReq;
import com.tencent.mm.opensdk.modelbase.BaseResp;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;

import cn.finalteam.okhttpfinal.OkHttpFinal;
import cn.finalteam.okhttpfinal.OkHttpFinalConfiguration;
import cn.jpush.android.api.JPushInterface;

/**
 * 共公基类Application
 */
public class BaseApp extends Application {
    public static final String APP_ID = "05d42ae967"; // bugly上注册的appid
    public static final String APP_WeChatID = "wx16187d036c777b54"; // 微信开发者上注册的appid
    public static IWXAPI msgApi;

    public static BaseResp resp;
    private static BaseReq req;

    @Override
    public void onCreate() {
        super.onCreate();
        intiBugly();

        OkHttpFinalConfiguration.Builder builder = new OkHttpFinalConfiguration.Builder();
        OkHttpFinal.getInstance().init(builder.build());


        /**
         * 第三方城市列表选择预先加载一级列表所有城市的数据
         */
        CityListLoader.getInstance().loadCityData(this);


         /**
          * 预先加载三级列表显示省市区的数据
          */
        CityListLoader.getInstance().loadProData(this);

        intiWeChat();

        if (isMainProcess()) {
            OpenInstall.init(this);
        }


        JPushInterface.setDebugMode(true);
        JPushInterface.init(this);

    }

    /**
     * 初始化 openinstall
     * @return
     */
    public boolean isMainProcess() {
        int pid = android.os.Process.myPid();
        ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        for (ActivityManager.RunningAppProcessInfo appProcess : activityManager.getRunningAppProcesses()) {
            if (appProcess.pid == pid) {
                return getApplicationInfo().packageName.equals(appProcess.processName);
            }
        }
        return false;
    }

    /**
     * 初始化微信支付
     */
    private void intiWeChat() {
        msgApi = WXAPIFactory.createWXAPI(this, APP_WeChatID,false);
        // 将该app注册到微信
        msgApi.registerApp(APP_WeChatID);
    }

    /**
     * 微信支付APP
     * @return
     */
    public static BaseResp getResp() {
        return resp;
    }

    public static void setResp(BaseResp resp) {
        BaseApp.resp = resp;
    }

    public static void setReq(BaseReq req) {
        BaseApp.req = req;
    }

    public static BaseReq getReq() {
        return req;
    }

    /**
     * 初始化Bugly 配置
     */
    private void intiBugly() {
        /**
         * true表示初始化时自动检查升级
         * false表示不会自动检查升级，需要手动调用Beta.checkUpgrade()方法
         */
        Beta.autoCheckUpgrade = true;
        /**
         * 设置升级周期为60s（默认检查周期为0s），60s内SDK不重复向后天请求策略
         */
        Beta.initDelay = 1 * 1000;

        /**
         * 设置通知栏大图标，largeIconId为项目中的图片资源；
         */
        Beta.largeIconId = R.mipmap.ic_launcher;

        /**
         * 设置状态栏小图标，smallIconId为项目中的图片资源id;
         */
        Beta.smallIconId = R.mipmap.ic_launcher;


        /**
         * 设置更新弹窗默认展示的banner，defaultBannerId为项目中的图片资源Id;
         * 当后台配置的banner拉取失败时显示此banner，默认不设置则展示“loading“;
         */
        Beta.defaultBannerId = R.mipmap.ic_launcher;

        /**
         * 设置sd卡的Download为更新资源保存目录;
         * 后续更新资源会保存在此目录，需要在manifest中添加WRITE_EXTERNAL_STORAGE权限;
         */
        Beta.storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);

        /**
         * 点击过确认的弹窗在APP下次启动自动检查更新时会再次显示;
         */
        Beta.showInterruptedStrategy = false;

        /**
         * 只允许在MainActivity上显示更新弹窗，其他activity上不显示弹窗;
         * 不设置会默认所有activity都可以显示弹窗;
         */
        Beta.canShowUpgradeActs.add(MainActivity.class);

        /**
         * 已经接入Bugly用户改用上面的初始化方法,不影响原有的crash上报功能;
         * init方法会自动检测更新，不需要再手动调用Beta.checkUpdate(),如需增加自动检查时机可以使用Beta.checkUpdate(false,false);
         * 参数1： applicationContext
         * 参数2：appId
         * 参数3：是否开启debug
         */
        Bugly.init(getApplicationContext(), APP_ID, true);
    }




}
